#ifndef __THREADPOOL_H__
#define __THREADPOOL_H__
//接收发送缓冲区大小
#include "head.h"
#include "taskQueue.h"
#define BUF_SIZE 1024
//命令中最多有几个参数
#define MAX_WORDNUM 8
//命令一个参数的最大长度
#define MAX_WORDLEN 30

//套接字类型
typedef int socket_t; 

//线程池
typedef struct {
    int threadNum; //子线程数量
    pthread_t *pthid;  //子线程数组
    taskQueue_t taskQueue;   //任务队列
}threadPool_t, *pThreadPool_t;

//传输文件协议：小货车
typedef struct {
    int len;//货车头，表示数据长度
    char buff[BUF_SIZE];//火车车厢，表示数据
}train_t;

//通讯类型
typedef struct {
	char cur_dir[PATH_MAX];     //工作目录
	int  _sess_fd ;        //对端套接字
	char _sess_buf[BUF_SIZE] ;  //缓冲区
}Session_t, *pSession_t ;

//命令类型
typedef struct {
    int _argc;       //命令中有几个参数
    char _cmd[MAX_WORDNUM][MAX_WORDLEN];
}Cmd_t, *pCmd_t;

static void set_arg(char *line, char *arg);
void confGet(char *conf, char *ip, int *port, int *thread_num); //从配置文件中获取参数
int tcpInit(char *ip, int port); //返回一个正在监听的tcp类型的服务器套接字
int epollAdd(int epfd,int fd);   //将fd加入epfd
int epollDel(int epfd,int fd);   //将fd从epfd里删除
void printCmd(pCmd_t pcmd); //打印命令
int threadPooInit(pThreadPool_t pthreadPool, int threadNum);   //初始化线程池
int startThreadPool(pThreadPool_t pthreadPool);   //启动线程池
int closeThreadPool(pThreadPool_t pthreadPool);  //关闭线程池
int destoryThreadPool(pThreadPool_t pPool);
void *child_handle(void* arg); //子线程的具体工作
int upload(int fd_socket, char *filename); //上传文件
int download(int fd_socket, char *filename); //下载文件
#endif
